import calendar
import time


import pandas as pd
import requests
import json

# 配置 API 基础 URL 和 API-Key
API_BASE_URL = "https://ai.anker-in.com/base-api/v1/chat-messages"  # 替换为实际的 API URL
API_KEY = "app-ugNSNyDXk2sTEAZcIDFhn2bn"  # 替换为实际的 API-Key

ICP_API_URL = "http://10.3.25.45:30000/instruction/outbound/query"

def clean_gpt_response(response_text):
    """
    清理 GPT 返回的内容，提取 JSON 数据
    :param response_text: GPT 返回的原始文本
    :return: 提取的 JSON 数据字符串
    """
    try:
        # 找到 JSON 数据的起始和结束位置
        start_index = response_text.find("{")
        end_index = response_text.rfind("}")
        if start_index != -1 and end_index != -1:
            json_text = response_text[start_index:end_index + 1]
            return json_text
        else:
            return None
    except Exception as e:
        print(f"清理 GPT 返回内容时出错: {e}")
        return None
# 定义函数：调用 ChatGPT API 校验地址
def validate_address_with_gpt(address_data):
    """
    调用本地 ChatGPT API 校验和修正地址
    :param address_data: 字典，包含 city, province, country, address1, zip
    :return: 修正后的地址数据（结构化）
    """
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    }

    # 构造请求体
    query = (
        f"你是资深的客服专家，对美国的地理信息了如指掌。\n"
        f"请根据美国 USPS 的规则对如下地址进行校验，判断地址是否满足标准规则，是否正确，若不标准或错误，请进行修正：\n"
        f"City: {address_data['city']}, Province: {address_data['province']}, "
        f"Country: {address_data['country']}, Address1: {address_data['address1']}, Address2: {address_data['address2']}, "
        f"ZIP: {address_data['zip']}。\n"
        f"City ：USPS 更倾向于使用更具体的社区名称来表示，所以你需要根据邮编和地址信息，选择USPS要求的City。\n"
        f"Province：应该缩写为标准的 USPS 格式。\n"
        f"ZIP：请检查邮编是否符合USPS要求，若不符合请尝试根据其他地址信息修复邮编，若无把握请不要更改邮编。\n"
        f"请综合Address1和Address2内容，将其合并为1个地址，但请注意不需要包含单元门牌号内容。如果合并后的地址，超过 35 个字符，请进行合理的简写，在确保地址信息表意清晰的前提下，不超过30个字符，同时请去除地址中的特殊字符(换行、制表符、表情、引号、unicode控制符)。\n"
        f"！！请仅以 JSON 格式返回修正后的地址，包含以下字段："
        f"city, province, country, address1, zip, remarks！！！！\n"
        f"！！！不要包含任何额外的文字或解释！！！！"
    )

    payload = {
        "query": query,
        "inputs": {},  # 必须包含空的 inputs 参数
        "response_mode": "blocking",
        "user": "address_validator"
    }

    # 发送 POST 请求
    response = requests.post(API_BASE_URL, headers=headers, data=json.dumps(payload))

    if response.status_code == 200:
        result = response.json()
        response_text = result.get("answer", "{}")

        # 清理返回内容并解析 JSON
        cleaned_response = clean_gpt_response(response_text)
        if cleaned_response:
            try:
                corrected_data = json.loads(cleaned_response)
                return corrected_data
            except json.JSONDecodeError as e:
                print(f"JSON 解析错误: {e}")
                print(f"GPT 返回的原始内容: {response_text}")
                return {"error": "无法解析 GPT 返回的 JSON 数据"}
        else:
            return {"error": "无法提取 JSON 数据"}
    else:
        print(f"API 请求失败，状态码: {response.status_code}, 错误信息: {response.text}")
        return {"error": f"API 请求失败，状态码: {response.status_code}"}

def get_order_address(order_numbers):
    timestamp = calendar.timegm(time.gmtime())
    headers = {
        "Client":"OFC",
        "ReqStamp": f"{timestamp}",
        # Sn 为随机字符
        "Sn": f"SN-{timestamp}",
        "Operator":"rhymed.liu"
    }
    payload = {
        "pageNum": 1,
        "param": {
            "upstreamBillCodeList": order_numbers
        }
    }
    response = requests.post(ICP_API_URL, headers=headers, json=payload)
    result = response.json()
    if result['success']:
        return result['data']['data']


